#include <stdio.h>
#include <mysql/mysql.h>
#include <stdint.h>

#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PWD "Wzw@1024."
#define DBNAME "gobang"

int main()
{
    // 1. 初始化mysql句柄
    MYSQL* mysql = mysql_init(NULL);
    if(mysql == NULL)
    {
        printf("mysql init failed!\n");
        return -1;
    }

    // 2. 连接服务器
    if(mysql_real_connect(mysql, HOST, USER, PWD, DBNAME, PORT, NULL, 0) == NULL)
    {
        printf("mysql server connect fialed : %s\n", mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }

    // 3. 设置客户端字符集
    if(mysql_set_character_set(mysql, "utf8") != 0)
    {
        printf("client set character_set fialed : %s\n", mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }

    // 4. 选择要操作的数据库
    // mysql_select_db(mysql, DBNAME);// 连接mysql服务器时已经设置过了

    // 5. 执行sql语句
    // char* sql = "insert stu values(null, '张三', 18, 95, 98, 92.5);";
    // char* sql = "update stu set ch=ch-5 where sn=1;";
    // char* sql = "delete from stu where sn=1;";
    char* sql = "select * from stu;";
    int ret = mysql_query(mysql, sql);
    if(ret != 0)
    {   
        printf("%s\n", sql);
        printf("musql query fialed : %s\n", mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }
    
    // 6. 如是查询语句，则要保存到本地
    MYSQL_RES* res = mysql_store_result(mysql);
    if(res == NULL)
    {
        printf("%s\n", sql);
        printf("musql store fialed : %s\n", mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }

    // 7. 获取结果集中的结果条数
    uint64_t rows = mysql_num_rows(res);
    unsigned int cols = mysql_num_fields(res);

    // 8. 遍历保存到本地的结果集
    for(int i = 0; i < rows; ++i)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for(int j = 0; j < cols; ++j)
        {
            printf("%s\t", row[j]);
        }
        printf("\n");
    }

    // 9. 释放结果集
    mysql_free_result(res);

    // 10. 关闭连接，释放句柄
    mysql_close(mysql);

    return 0;
}